package com.ruoyi.api.util;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * 
 * <p>Project:		smart-order-core	<p>
 * <p>Module:		core	<p>
 * <p>Description:	json工具类，主要依赖fastJson	<p>
 *
 * @author yujian
 * @date 2017年9月14日 上午10:52:07
 */
public class JSONUtil {
	
	
	
	// JsonStr to Entity
	/**
	 * json字符串转成 class类的实体对象
	 * @param text
	 * @param clazz
	 * @return
	 */
	public static Object parseJsonToEntity(String text, Class<?> clazz) {
		return JSONObject.parseObject( text, clazz );
	}
	
	/**
	 * JSONArray 转成 list
	 * @param jsonAry
	 * @param clazz
	 * @return
	 */
	public static List parseJsonArrayToEntityArray(JSONArray jsonAry,Class<?> clazz) {
		return parseJsonToEntityArray( jsonAry.toJSONString(), clazz );
	}
	
	
	// JsonStr to Entity Array
	/**
	 * json字符串转成 class类的实体对象List集合
	 * @param text
	 * @param clazz
	 * @return
	 */
	public static List<?> parseJsonToEntityArray(String text, Class<?> clazz) {
		return JSON.parseArray( text, clazz );
	}
	
	
	// JsonStr to Map
	/**
	 * json字符串转成Map
	 * @param text
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static Map<String,Object> parseJsonToMap(String text) {
		return JSON.parseObject( text, Map.class );
	}
	
	
	// JsonStr to List
	/**
	 * json字符串转成List
	 * @param text
	 * @return
	 */
	@SuppressWarnings( "rawtypes" )
	public static List parseJsonStrToList(String text) {
		return (List)JSON.parseObject(text, List.class);
	}
	
	// Entity to JsonStr
	/**
	 * 实体对象转成json字符创
	 * @param objIn
	 * @return
	 */
	public static String parseEntityToJson(Object objIn) {
		return JSON.toJSONString( objIn );
	}
	
	
	// Array Entity to JsonStr
	/**
	 * list集合装成json字符串
	 * @param objList
	 * @return
	 */
	public static String parseEntityArrayToJson(List<?> objList) {
		return JSON.toJSONString( objList );
	}
	
	// Map to JsonStr
	/**
	 * map转成json字符串
	 * @param map
	 * @return
	 */
	public static String parseMapToJson(Map<String,Object> map) {
		return JSON.toJSONString( map );
	}
	
	// JsonStr to JsonObject
	/**
	 * json字符串转成JsonObject
	 * @param text
	 * @return
	 */
	public static JSONObject parseEntityToJsonObject(String text) {		
		return JSON.parseObject( text );
	}
	
	// JsonStr to JsonArray
	/**
	 * json字符串转成JsonArray
	 * @param text
	 * @return
	 */
	public static JSONArray parseEntityToJsonArray(String text) {		
		return JSONArray.parseArray( text );
	}
	
	// Entity to Map
	/**
	 * entity转map
	 * @param objIn
	 * @return
	 */
	public static Map<String,Object> parseEntityToMap(Object objIn) {
		String json = JSONUtil.parseEntityToJson( objIn );
		return JSONUtil.parseJsonToMap( json );		
	}
	
	// Map to Entity
	/**
	 * map转entity
	 * @param mapIn
	 * @param clazz
	 * @return
	 */
	public static Object parseMapToEntity(Map<String,Object> mapIn, Class<?> clazz) {
		String json = JSONUtil.parseMapToJson( mapIn );
		return JSONUtil.parseJsonToEntity( json, clazz );
	}
	
	// entity to entity
	/**
	 * 对象转对象
	 * @param objIn
	 * @param clazz
	 * @return
	 */
	public static Object parseEntityToEntity(Object objIn,Class<?> clazz) {
		String josn = JSONUtil.parseEntityToJson( objIn );
		return JSONUtil.parseJsonToEntity( josn, clazz );
	}
	
	 /**
	 * 方法描述：<br>
	 * 	往entity中添加属性，json输出
	 * @author: chenjingshen
	 * @param objIn
	 * @param key
	 * @param attribute
	 * @return
	 * @date: 2018年1月12日
	 */
	public static String putAttributeToEntityJSONString(Object objIn, String key, Object attribute) {
		JSONObject jsonObj = JSONUtil.parseEntityToJsonObject(JSONObject.toJSONString(objIn));
		jsonObj.put(key, attribute);
		return jsonObj.toJSONString();
	}
	
	/**
	 * 检查String字符串
	 * @param text
	 * @return
	 */
	public static Boolean checkStringIfJsonStyle(String text) {
		return text!=null&&(text.startsWith( "{" )||text.startsWith( "[" ));
	}
}
